#include <iostream>

using namespace std;
//制作饮品的大致流程为：煮水 -  冲泡 - 倒入杯中 - 加入辅料
//利用多态技术实现本案例，提供抽象制作饮品基类，提供子类制作咖啡和茶叶

//抽象制作饮品
class AbstractDrink {
public:
    virtual void Boil() = 0;//烧水
    virtual void Brew() = 0;//冲泡
    virtual void PourInCup() = 0;//倒入杯中
    virtual void PutSomething() = 0;//加入佐料
    void MakeDrink() {//制作流程
        Boil();
        Brew();
        PourInCup();
        PutSomething();
    }
};

//制作咖啡
class Coffee : public AbstractDrink {
public:
    void Boil() {
        cout << "煮农夫山泉!" << endl;
    }

    void Brew() {
        cout << "冲泡咖啡" << endl;
    }

    void PourInCup() {
        cout << "将咖啡倒入杯中!" << endl;
    }

    void PutSomething() {
        cout << "加入糖和牛奶!" << endl;
    }
};

//制作茶水
class Tea : public AbstractDrink {
public:
    void Boil() {
        cout << "煮自来水!" << endl;
    }

    void Brew() {
        cout << "冲泡茶叶!" << endl;
    }

    void PourInCup() {
        cout << "将茶水倒入杯中!" << endl;
    }

    void PutSomething() {
        cout << "加入枸杞!" << endl;
    }
};

//业务函数
void doWork(AbstractDrink *ad) {
    ad->MakeDrink();
    delete ad;
}

void test1() {
    doWork(new Coffee);
    cout << "=========" << endl;
    doWork(new Tea);
}

int main() {
    test1();
    return 0;
}